package com.example.finalassignment.interceptor;

import com.example.finalassignment.common.Cache;
import com.example.finalassignment.common.ThreadContext;
import com.example.finalassignment.exception.ServiceException;
import com.example.finalassignment.util.JwtUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

/**
 * 自定义拦截器
 */

@Component
public class TokenInterceptor implements HandlerInterceptor {

    /**
     * preHandle：在请求到达处理器之前执行，可以用于权限验证、数据校验等操作。如果返回true，则继续执行后续操作；如果返回false，则中断请求处理。
     *  postHandle：在处理器处理请求之后执行，可以用于日志记录、缓存处理等操作。
     * afterCompletion：在视图渲染之后执行，可以用于资源清理等操作。
     */

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = ThreadContext.getToken();

        if(token == null || !Cache.USER_INFO.containsKey(token) && JwtUtil.verifyToken(token)) {
            throw new ServiceException(201,"请先登录");
        }

        return true;
    }
}
